import CONSTANT from '../constant/urlconstant'



function getConfig() {
    var pageUrl = window.location.href
    console.log("开始请求indexJsRequire");
    console.log('当前页面url', window.location.href);
    let url = `${CONSTANT.WX.indexJsRequire}?url=${pageUrl}`;
    console.log('请求地址', url);
    sendXmlHttpRequest(url, {}, function(err, res) {
        console.log('err')
        console.log(err)
        console.log(res)
        if (res.status == 200) {
            let data = res.data.bussData;
            console.log('当前页面url', window.location.href);
            console.log('当前页面url', pageUrl);
            console.log('请求地址：', url);
            console.log("返回参数", data);
            console.log('appId', data.appId);
            console.log('timestamp', data.timestamp);
            console.log('nonceStr', data.nonceStr);
            console.log('signature', data.signature);
            console.log('开始请求wx jssdk');
            if (typeof window.WeixinJSBridge == "undefined") {
                console.log('typeof window.WeixinJSBridge == "undefined"');
                document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
                    console.log('WeixinJSBridgeReady');
                    wx.config({
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                        appId: data.appId, // 必填，公众号的唯一标识
                        timestamp: data.timestamp, // 必填，生成签名的时间戳
                        nonceStr: data.nonceStr, // 必填，生成签名的随机串
                        signature: data.signature, // 必填，签名
                        jsApiList: [
                                "checkJsApi", //判断当前客户端版本是否支持指定JS接口
                                "previewImage",
                                "onMenuShareTimeline", //分享到朋友圈
                                "onMenuShareAppMessage", //分享给朋友
                                "openLocation",
                                "getLocation",
                                "scanQRCode",
                                "chooseWXPay"
                            ] // 必填，需要使用的JS接口列表
                    });
                    wx.ready(function() {
                        localStorage.setItem("isConfigS", true);
                        console.log('请求jssdk成功');
                        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
                    });
                    wx.error(function(res) {
                        localStorage.setItem("isConfigS", false);
                        console.error('请求jssdk失败');
                        console.error(res);
                        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
                    });
                }, false);
            } else {
                console.log('typeof window.WeixinJSBridge != "undefined"');
                wx.config({
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                    appId: data.appId, // 必填，公众号的唯一标识
                    timestamp: data.timestamp, // 必填，生成签名的时间戳
                    nonceStr: data.nonceStr, // 必填，生成签名的随机串
                    signature: data.signature, // 必填，签名
                    jsApiList: [
                            "checkJsApi", //判断当前客户端版本是否支持指定JS接口
                            "previewImage",
                            "onMenuShareTimeline", //分享到朋友圈
                            "onMenuShareAppMessage", //分享给朋友
                            "openLocation",
                            "getLocation",
                            "scanQRCode",
                            "chooseWXPay"
                        ] // 必填，需要使用的JS接口列表
                });
                wx.ready(function() {
                    localStorage.setItem("isConfigS", true);
                    console.log('请求jssdk成功');
                    // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
                });
                wx.error(function(res) {
                    localStorage.setItem("isConfigS", false);
                    console.error('请求jssdk失败');
                    console.error(res);
                    // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
                });
            }

        }
    })
}
//注册发送请求函数
//sending xml HTTP request
function sendXmlHttpRequest(url, params, callback) {
    try {
        console.log("Sending XML HTTP request");
        var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : null;
        var data = JSON.stringify(params);

        xhr.open('POST', url, true);
        xhr.setRequestHeader("Content-type", "application/json;charset=utf-8");

        // fallback on error
        xhr.onreadystatechange = function(data) {
            //服务器返回200 300 400系列状态值都认为请求成功或不可能成功，丢弃请求；500系列状态值则认为服务器出错，需重试请求
            var rep = data.target.response ? JSON.parse(data.target.response) : data.target.response;
            if (this.readyState === 4 && this.status >= 200 && this.status < 500) {
                if (typeof callback === 'function') {
                    callback(false, rep);
                }
            } else if (this.readyState === 4) {
                console.log("Failed Server XML HTTP request", this.status);
                if (typeof callback === 'function') {
                    callback(true, rep);
                }
            }
        };

        xhr.send(data);
    } catch (e) {
        // fallback
        console.log("Failed XML HTTP request", e);
        if (typeof callback === 'function') {
            callback(true, 'fail');
        }
    }
}